import numpy as np
from PIL import Image, ImageOps


def convert_image_to_array(image_path):
    """
    将手写数字图像转换为MNIST格式的numpy数组
    处理流程：反色 → 灰度 → 缩放 → 归一化 → 展平
    """
    try:
        # 加载图像并转换为灰度
        img = Image.open(image_path)

        # 反色处理（将黑底白字转为白底黑字）
        img = ImageOps.invert(img)

        # 转换为灰度图像
        img = img.convert("L")

        # 缩放为28x28像素（保持纵横比）
        img = img.resize((28, 28), Image.Resampling.LANCZOS)

        # 转换为numpy数组
        img_array = np.array(img)

        # 数据标准化 (归一化到0-1范围)
        img_array = img_array.astype(np.float32) / 255.0

        # 调整数值分布（增强对比度）
        img_array = np.where(img_array < 0.5, 0, 1.0)

        return img_array

    except Exception as e:
        print(f"图像处理错误: {str(e)}")
        return None